import { api } from '../utils/request.js';

/**
 * 简单的认证状态管理
 * 管理用户token和用户信息
 */
const authStore = {
	// 获取当前token
	getToken() {
		return uni.getStorageSync('token') || '';
	},
	
	// 设置token
	setToken(token) {
		uni.setStorageSync('token', token);
	},
	
	// 清除token
	clearToken() {
		uni.removeStorageSync('token');
	},
	
	// 获取当前用户信息
	getCurrentUser() {
		const userStr = uni.getStorageSync('currentUser');
		return userStr ? JSON.parse(userStr) : null;
	},
	
	// 设置当前用户信息
	setCurrentUser(user) {
		uni.setStorageSync('currentUser', JSON.stringify(user));
	},
	
	// 清除用户信息
	clearCurrentUser() {
		uni.removeStorageSync('currentUser');
	},
	
	// 检查是否已登录
	isLoggedIn() {
		return !!this.getToken();
	},
	
	// 微信登录
	async loginWithWeixin() {
		try {
			// 1. 调用微信登录获取code
			const loginRes = await this.wxLogin();
			const code = loginRes.code;
			
			if (!code) {
				throw new Error('获取微信登录code失败');
			}
			
			// 2. 将code发送给后端
			const response = await api.post('/api/auth/wx-login', { code });
			
			// 3. 保存token和用户信息
			if (response.token) {
				this.setToken(response.token);
			}
			
			if (response.user) {
				this.setCurrentUser(response.user);
			}
			
			uni.showToast({
				title: '登录成功',
				icon: 'success',
				duration: 2000
			});
			
			return response;
			
		} catch (error) {
			console.error('微信登录失败:', error);
			uni.showToast({
				title: error.message || '登录失败',
				icon: 'none',
				duration: 2000
			});
			throw error;
		}
	},
	
	// 封装wx.login为Promise
	wxLogin() {
		return new Promise((resolve, reject) => {
			uni.login({
				provider: 'weixin',
				success: resolve,
				fail: reject
			});
		});
	},
	
	// 退出登录
	logout() {
		this.clearToken();
		this.clearCurrentUser();
		
		uni.showToast({
			title: '已退出登录',
			icon: 'success',
			duration: 1500
		});
		
		// 可以在这里跳转到登录页或首页
		// uni.reLaunch({ url: '/pages/market/index' });
	},
	
	// 获取用户信息
	async getUserInfo() {
		try {
			const userInfo = await api.get('/api/auth/user-info', {}, true);
			this.setCurrentUser(userInfo);
			return userInfo;
		} catch (error) {
			console.error('获取用户信息失败:', error);
			throw error;
		}
	},
	
	// 更新用户信息
	async updateUserInfo(userInfo) {
		try {
			const updatedUser = await api.put('/api/auth/user-info', userInfo, true);
			this.setCurrentUser(updatedUser);
			
			uni.showToast({
				title: '更新成功',
				icon: 'success',
				duration: 1500
			});
			
			return updatedUser;
		} catch (error) {
			console.error('更新用户信息失败:', error);
			throw error;
		}
	}
};

export default authStore;